#ifndef _MBRE_COMMON_H_
#define _MBRE_COMMON_H_

#include "mbre_config.h"
#include "typedef.h"

// 自定义类型

// 事件
typedef enum _mbre_event
{
    MBRE_EV_RECEIVED_PKG,   // 收到了一包数据，需要进行处理
    MBRE_EV_TIME_OUT,       // 一包数据接收到一半，然后超时了
    MBRE_EV_CHECK_ERROR,    // 一包数据收完了，但是数据包校验未通过（数据有错误）
    MBRE_EV_BUS_ERROR,      // 总线错误，一般是出现了2个主机
    MBRE_EV_BUFF_FULL,      // 缓存满了（此事件在中断线程传递），必须立即复制出数据，不然会被覆盖
    MBRE_EV_CONNECTED,      // 已连接：收到了任意数据包（即便ID不匹配）
    MBRE_EV_DISCONNECTED    // 已断连：1秒内未收到任何数据包
}mbre_event_t;

// 事件回调函数类型
typedef void (*mbre_callback_t)(mbre_event_t e);

// 数据区格式
typedef struct _mbre_data
{
    u8 Id;          // 设备ID
    u8 Cmd;         // 命令
    u8 Param[];    // 参数
}mbre_data_t;

// 主机发送的READ命令的参数
typedef struct _mbre_read_param
{
    u16 Reserved;
    u16 Addr;
    u16 ReadLength;
}mbre_read_param_t;

// 主机发送的WRITE命令的参数
typedef struct _mbre_write_param
{
    u16 Reserved;
    u16 Addr;
    u16 WriteLength;
    u8 WData[];    // 要写入的数据
}mbre_write_param_t;

// 命令列表
typedef enum _mbre_cmd
{
    MBRE_CMD_READ = 0x03,
    MBRE_CMD_WRITE = 0X10,
    MBRE_CMD_FIND = 0X41,       // 从机协议内部处理
    MBRE_CMD_MODIFY_ID = 0x42,  // 从机协议内部处理
    MBRE_CMD_ACTION = 0X43,
    MBRE_CMD_HEARTBEAT = 0X44   // 从机协议内部处理
}mbre_cmd_t;

// 特殊ID列表
typedef enum _mbre_sid
{
    MBRE_SID_BROADCUST = 0,
    MBRE_SID_OP_ID = 243
}mbre_sid_t;

typedef enum _mbre_role
{
    MBRE_ROLE_HOST = 0,
    MBRE_ROLE_SLAVE
}mbre_role_t;

#endif

